// 请求封装

import axios from "axios"
import { useUserStore } from "@/stores/index.js"
import { ElMessage } from "element-plus"
import router from "@/router/index.js"

const baseURL = "http://big-event-vue-api-t.itheima.net"

const request = axios.create({
  // 1. 基础地址，超时时间
  baseURL,
  timeout: 10000,
})

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // 2. 携带token
    const userStore = useUserStore()
    if (userStore.token) {
      config.headers.Authorization = userStore.token
    }
    return config
  },
  (err) => Promise.reject(err),
)

// 响应拦截器
request.interceptors.response.use(
  (res) => {
    // 4. 摘取核心响应数据
    if (res.data.code === 0) {
      return res
    }
    // 3. 处理业务失败,给出错误提示，抛出错误
    ElMessage.error(res.data.message || "服务异常")
    return Promise.reject(re.data)
  },
  (err) => {
    // 5. 处理 401 错误，权限不足/token 过期 => 拦截到登录页
    if (err.response?.status === 401) {
      router.push("/login")
    }

    // 错误的默认情况，只要给提示
    ElMessage.error(err.response.data.message || "服务异常")
    return Promise.reject(err)
  },
)

export default request
export { baseURL }
